VACUUM FULL
по шагам:ACCESS EXCLUSIVE
lock. Ни SELECT
, ни UPDATE
, ни другие операции на таблице невозможны во время выполнения.EXPLAIN
показывает план выполнения запроса — то, как PostgreSQL собирается его исполнять.EXPLAIN SELECT * FROM users WHERE email = 'a@example.com';
Index Scan using idx_user_email on users (cost=0.29..8.30 rows=1 width=100) Index Cond: (email = 'a@example.com')
Это хорошо — используется Index Scan. Плохой вариант — Seq Scan
(полный перебор).
EXPLAIN ANALYZE
Если добавить ANALYZE
, PostgreSQL реально выполнит запрос и покажет фактическое время и кол-во строк.
`EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'a@example.com';`
Как интерпретировать план
Элемент | Значение |
---|---|
Seq Scan |
Последовательное сканирование таблицы |
Index Scan |
Используется индекс |
Bitmap Index Scan + Bitmap Heap Scan |
Промежуточный компромисс для нескольких условий |
Nested Loop , Hash Join , Merge Join |
Алгоритмы соединения таблиц |
cost=X..Y |
Примерная стоимость начала и окончания |
rows=Z |
Оценка количества строк |
actual time |
Фактическое время (при EXPLAIN ANALYZE ) |
механизм, позволяющий пошагово обрабатывать результат SQL-запроса, особенно когда:
Что делает DECLARE c CURSOR FOR SELECT count(*) FROM accounts;
Эта команда:
c
, привязанный к результату запроса SELECT count(*) FROM accounts
.FETCH
, чтобы извлечь данные.JOIN
и в чём их отличияВид JOIN |
Синоним | Что делает |
---|---|---|
INNER JOIN |
JOIN |
Возвращает только совпадающие строки из обеих таблиц (по условию ON ) |
LEFT JOIN |
Возвращает все строки из левой таблицы, и совпадающие из правой (или NULL ) |
|
RIGHT JOIN |
Возвращает все строки из правой таблицы, и совпадающие из левой (или NULL ) |
|
FULL OUTER JOIN |
Возвращает все строки из обеих таблиц, заполняя NULL , если совпадения нет |
|
CROSS JOIN |
Возвращает декартово произведение — каждая строка левой с каждой правой |